<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="divs"></div>
    <script>
      //函数名和实例化构造名相同且大写（非强制，但这么写有助于区分构造函数和普通函数）
      // function Person(name, age) {
      //   this.name = name
      //   this.age = age
      //   console.log(this)
      // }
      // Person.prototype.say = function () {
      //   return '我的名字叫' + this.name + '今年' + this.age + '岁了'
      // }
      // var obj = new Person('laotie', 88) //通过构造函数创建对象，必须使用new 运算符
      // console.log(obj.say()) //我的名字叫laotie今年88岁了

      //   class Person {
      //     //定义了一个名字为Person的类
      //     constructor(name, age) {
      //       //constructor是一个构造方法，用来接收参数
      //       this.name = name //this代表的是实例对象
      //       this.age = age
      //     }
      //     say() {
      //       //这是一个类的方法，注意千万不要加上function
      //       return '我的名字叫' + this.name + '今年' + this.age + '岁了'
      //     }
      //     set() {
      //       this.name = '123'
      //     }
      //     setOption({}){
      //         this.seris = seris
      //     }
      //     init(obj){
      //         obj.innerHtml()
      //     }
      //   }
      //   var obj = new Person('laotie', 88)
      //   console.log(obj.name) //我的名字叫laotie今年88岁了
      //   console.log(obj.set())
      //   console.log(obj.say()) //我的名字叫laotie今年88岁了
      //   setOption({

      //   })
      //   class Parent {
      //     constructor(name = 'meili') {
      //       this.name = name
      //     }
      //     fun() {}
      //   }

      //   class Son extends Parent {
      //     constructor(name) {
      //       this.proname = name
      //       super()
      //     }
      //   }

      //   let obj = new Son(123)
      //   console.log(obj)

      //   class Example {
      //     constructor(a, b) {
      //       this.a = a // 实例化时调用 set 方法
      //       this.b = b
      //     }
      //     get ar() {
      //       console.log('getter')
      //       return this.a + '老踢人'
      //     }
      //     set ar(a) {
      //       console.log('setter')
      //       this.a = a + '888'
      //     }
      //   }
      //   let exam = new Example(1, 2) // 不断输出 setter ，最终导致 RangeError
      //   console.log((exam.ar = 99))
      //   console.log(exam.ar)

      //   class Parent {
      //     constructor(name = 'nihao') {
      //       this.printName = name
      //     }

      //     get getnames() {
      //       return '8888' + this.printName
      //     }
      //     set getnames(value) {
      //       this.printName = value
      //     }
      //   }
      //   obj = new Parent()
      //   console.log(obj.getnames)
      //   //赋值
      //   obj.getnames = '小红鞋'
      //   console.log(obj.printName)

      //   class ren {
      //     constructor(name, url) {
      //       this.username = name + ' 你好'
      //       this.myurl = '我的博客：' + url
      //     }
      //     jump(num) {
      //       return num * num
      //     }
      //     beng() {}
      //   }
      //   var renObj = new ren('张三', 'www.vlog.com')
      //   console.log(renObj.username)
      //   console.log(renObj.myurl)
      //   console.log(renObj.jump(4))
      // 基类
      class Animal {
        // eat() 函数
        constructor(name) {
          this.name = name + name
        }
        introduction() {
          return (
            '我的名字是' +
            this.name +
            '我会' +
            this.eat() +
            '还会' +
            this.sleep()
          )
        }
        eat() {
          console.log('我会吃')
          return '吃狗粮'
        }
        // sleep() 函数
        sleep() {
          console.log('我can睡')
          return '睡懒觉'
        }
      }

      //派生类
      class Dog extends Animal {
        constructor(username) {
          super(username)
        }
        // bark() 函数
        bark() {
          return this.introduction()
        }
      }
      //   class Cat extends Animal {
      //     // bark() 函数
      //     bark() {
      //       return this.introduction()
      //     }
      //   }
      var dog = new Dog('狗')
      console.log(dog.bark())

      class Runoob {
        constructor(name) {
          this.sitename = name
        }
        get s_name() {
          return this.sitename + '666'
        }
        set s_name(x) {
          this.sitename = x + 'setter'
        }
        static myname(x) {
          return 18 + x.sitename
        }
        // getMyname() {
        //   return this.myname(this)
        // }
      }

      let noob = new Runoob('菜鸟教程')
      //   console.log(noob.s_name)
      //   noob.s_name = '都行'
      //   console.log(noob.s_name)
      console.log(Runoob.myname(noob))
    </script>
  </body>
</html>
